package pe.edu.sisclas.model.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.sisclas.model.dao.UsuarioDao;
import pe.edu.sisclas.model.dao.exception.DaoException;
import pe.edu.sisclas.model.domain.Docente;
import pe.edu.sisclas.model.domain.Usuario;
import pe.edu.sisclas.model.service.UsuarioService;
import pe.edu.sisclas.model.service.exception.ServiceException;

@Service("usuarioService")
public class UsuarioServiceImpl implements UsuarioService {

	@Autowired
	private UsuarioDao usuarioDao;

	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public Usuario obtenerUsuario(String usuario, String contrasenia)
			throws ServiceException {
		try {
			return usuarioDao.getUsuario(usuario, contrasenia);
		} catch (DaoException d) {
			throw ServiceException.mensaje("Error al obtener usuario.");
		}
	}

	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public List<Docente> validarUsuario(String textoBusqueda)
			throws ServiceException {
		return usuarioDao.validarUsuario(textoBusqueda);
	}

	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public void crearUsuario(Usuario usuario) throws ServiceException {
		try {
			this.usuarioDao.crearUsuario(usuario);
		} catch (DaoException e) {
			e.printStackTrace();
			throw ServiceException.mensaje("Error al crear el usuario.");
		}
	}

	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public List<Usuario> getUsuarios() throws ServiceException {
		try {
			return usuarioDao.getUsuarios();
		} catch (DaoException e) {
			e.printStackTrace();
			throw ServiceException.mensaje("Error al cargar los usuarios.");
		}

	}

	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public void Delete(Usuario usu) throws ServiceException {
		try {
			usuarioDao.Delete(usu);

		} catch (Exception e) {
			throw ServiceException.mensaje("Error al eliminar el usuario.");
		}

	}

	@Transactional(readOnly = false, rollbackFor = ServiceException.class)
	@Override
	public Usuario obtenerUsuarioPorDocente(Docente docente)
			throws ServiceException {
		try {
			return this.usuarioDao.getUsuarioByDocente(docente);
		} catch (DaoException e) {
			throw ServiceException.mensaje("Error en la carga del usuario.");
		}
	}

}
